package com.itheima.cas;

import java.util.concurrent.atomic.AtomicInteger;

public class Demo01 {

    public static void main(String[] args) {
/*
        //public AtomicInteger()：	   			    初始化一个默认值为0的原子型Integer
        AtomicInteger ai = new AtomicInteger();
        System.out.println(ai);
        //public AtomicInteger(int initialValue)：  初始化一个指定值的原子型Integer
        AtomicInteger ai2 = new AtomicInteger(10);
        System.out.println(ai2);
        //int get():   			 				获取值
        int i = ai2.get();
        System.out.println(i);
        //int getAndIncrement():      			 以原子方式将当前值加1，注意，这里返回的是自增前的值。
        int result = ai2.getAndIncrement();//先获取 后+1   i++
        System.out.println(result);
        System.out.println(ai2);
        //int incrementAndGet():     				 以原子方式将当前值加1，注意，这里返回的是自增后的值。
        int result2 = ai.incrementAndGet();//先加+1 后获取值  ++i
        System.out.println(result2);
        System.out.println(ai);
        //int addAndGet(int data):				 以原子方式将输入的数值与实例中的值（AtomicInteger里的value）相加，并返回结果。
        AtomicInteger ai3 = new AtomicInteger(200);
 *//*       int result3 = ai3.addAndGet(300);
        System.out.println(result3);
        System.out.println(ai3);*//*
        int result3 = ai3.getAndAdd(300);
        System.out.println(result3);//200
        System.out.println(ai3);//500
        //int getAndSet(int value):   			 以原子方式设置为newValue的值，并返回旧值。
        AtomicInteger ai4 = new AtomicInteger(1000);
        int result4 = ai4.getAndSet(2000);
        System.out.println(result4);
        System.out.println(ai4);
        */

        //int compareAndSet?(int expectedValue, int newValue) 比较并交换
        AtomicInteger ai = new AtomicInteger(100);
        /*
        比较 并 设置
        如果 预期的值和 内存中的值 一致  就将新的值设置到内存中
        如果预期的值和内存中的值不一致 就不改
         */
        boolean b = ai.compareAndSet(100, 200);
        System.out.println(b);//false
        System.out.println(ai);//100
    }
}
